雖然 openshift 有提供的 Laravel 卡匣(cartridge),但版本只到 5.0 版本,環境也只有 PHP 5.4,無法滿足 Laravel 5.3 的最低需求 PHP >= 5.6.4
。所以這邊將記錄如何在 openshift 安裝 PHP 5.6.4 以上版本環境。
PHP 7.0 + MySQL5.5 的環境
(1) 安裝 nginx 卡匣
官方 github:
https://github.com/boekkooi/openshift-cartridge-nginx
卡匣位置:
http://cartreflect-claytondev.rhcloud.com/github/boekkooi/openshift-cartridge-nginx
(2) 安裝 PHP 卡匣
官方 github:
https://github.com/boekkooi/openshift-cartridge-php
卡匣位置:
http://cartreflect-claytondev.rhcloud.com/github/boekkooi/openshift-cartridge-php
(3) 安裝 Openshfit 提供的官方 MySQL 5.5 卡匣
這邊直接使用官方提供的 MySQL 5.5 卡匣,安裝完畢後,會有登入的帳號密碼、資料庫名稱,抄錄下來,等會兒會使用到。
(4) git clone 專案檔
透過 git 將專案檔 clone 到本機,在這個動作之前,要先到 openshift 的後台,將自己的 ssh-key 登錄進去
(5) 修改 nginx 設定
將 .openshift/nginx.conf.erb
的內容,找到該部分
server {
listen <%= ENV['OPENSHIFT_NGINX_IP'] %>:<%= ENV['OPENSHIFT_NGINX_PORT'] %>;
root <%= ENV['OPENSHIFT_REPO_DIR'] %>/public;
location / {
index index.html index.htm;
}
}
修改為
server {
listen <%= ENV['OPENSHIFT_NGINX_IP'] %>:<%= ENV['OPENSHIFT_NGINX_PORT'] %>;
root <%= ENV['OPENSHIFT_REPO_DIR'] %>/public;
index index.html index.htm index.php;
charset utf-8;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location = /favicon.ico { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:<%= ENV['OPENSHIFT_PHP_SOCKET'] %>;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_script_name;
include <%= ENV['OPENSHIFT_NGINX_DIR'] %>/usr/nginx-<%= ENV['OPENSHIFT_NGINX_VERSION'] %>/conf/fastcgi_params;
}
location ~ /\.ht {
deny all;
}
}
(6) 建立 openshift 的事件腳本
建立 .openshift/action_hooks/build
檔案,內容為
1 |
|
設定執行權限 chmod +x .openshift/action_hooks/build
若是在 window 你必需透過 git update-index --chmod=+x .openshift/action_hooks/build
來設定。這個腳本是為了 openshift 在 build 時會去試著找 .openshift/fpm 和 .openshift/cli 的設定檔來覆寫原本 php.ini 或 nginx 的設定檔
(7) 使用自訂設定檔修正 MySQL 的 socket 路徑設定錯誤的問題
從這邊 https://github.com/boekkooi/openshift-cartridge-php/tree/master/conf
下載三個設定檔
- php.ini.erb 下載至 .openshift/cli/php.ini.erb
- php-fpm.ini.erb 下載至 .openshift/fpm/php.ini.erb
- php-fpm.conf.erb 下載至 .openshift/fpm/php-fpm.conf.erb
在 .openshift/cli/php.ini.erb
和 .openshift/fpm/php.ini.erb
設定檔內容,搜尋三個屬性
pdo_mysql.default_socket =
mysql.default_socket =
mysqli.default_socket =
設定如下:
pdo_mysql.default_socket = <%= defined?(ENV['OPENSHIFT_MYSQL_DB_SOCKET']) ? ENV['OPENSHIFT_MYSQL_DB_SOCKET'] : '' %>
mysql.default_socket = <%= defined?(ENV['OPENSHIFT_MYSQL_DB_SOCKET']) ? ENV['OPENSHIFT_MYSQL_DB_SOCKET'] : '' %>
mysqli.default_socket = <%= defined?(ENV['OPENSHIFT_MYSQL_DB_SOCKET']) ? ENV['OPENSHIFT_MYSQL_DB_SOCKET'] : '' %>
在 .openshift/fpm/php-fpm.conf.erb
設定檔內容找到
;Informational Environment Variables
追加缺少的環境變數
env[OPENSHIFT_SECRET_TOKEN] = $OPENSHIFT_SECRET_TOKEN
(8) 測試資料庫連線
接著下載 adminer.php 至 public/adminer.php。然後 git push 專案檔後,開啟 http://{app-name}-{username}.rhcloud.com
輸入步驟(3)所抄錄的登入帳號密碼,進行資料庫連線測試
Laravel 5.3 安裝
(1) 在本地端透過 composer 安裝好 laravel 5.2
先在本地端透過 composer create-project –prefer-dist laravel/laravel blog 安裝 laravel 5.3 後,再把整個 blog 的內容移動覆寫到 openshift 專案資料夾
(2) 修改 laravel 設定檔
config/app.php
[
'url' => env('APP_URL', env('OPENSHIFT_APP_DNS', 'http://localhost')),
'key' => env('APP_KEY', env('OPENSHIFT_SECRET_TOKEN')),
]
config/database.php
'connections' => [
'sqlite' => [
'driver' => 'sqlite',
'database' => storage_path().'/database.sqlite3',
'prefix' => '',
],
'mysql' => [
'driver' => 'mysql',
'host' => env('DB_HOST', env('OPENSHIFT_MYSQL_DB_HOST', 'localhost')),
'port' => env('DB_PORT', env('OPENSHIFT_MYSQL_DB_PORT', 3306)),
'database' => env('DB_DATABASE', env('OPENSHIFT_APP_NAME', 'forge')),
'username' => env('DB_USERNAME', env('OPENSHIFT_MYSQL_DB_USERNAME', 'forge')),
'password' => env('DB_PASSWORD', env('OPENSHIFT_MYSQL_DB_PASSWORD', '')),
'charset' => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix' => '',
'strict' => false,
],
'pgsql' => [
'driver' => 'pgsql',
'host' => env('DB_HOST', env('OPENSHIFT_POSTGRESQL_DB_HOST', 'localhost')),
'port' => env('DB_PORT', env('OPENSHIFT_POSTGRESQL_DB_PORT', 5432)),
'database' => env('DB_DATABASE', env('OPENSHIFT_APP_NAME', 'forge')),
'username' => env('DB_USERNAME', env('OPENSHIFT_POSTGRESQL_DB_USERNAME', 'forge')),
'password' => env('DB_PASSWORD', env('OPENSHIFT_POSTGRESQL_DB_PASSWORD', '')),
'charset' => 'utf8',
'prefix' => '',
'schema' => 'public',
]
],
// ... 略 ...
(3) 追加 for laravel 的事件腳本內容
新增並編輯 .openshift/action_hooks/deploy
檔案,注意!不是 build ,在 build 的事件腳本是無法對資料庫進行連線,這會導致 php artisan migrate 的錯誤。設定執行權限 chmod +x .openshift/action_hooks/deploy
若是在 window 你必需透過 git update-index --chmod=+x .openshift/action_hooks/deploy
來設定。
1 |
|